package com.rawr.remotemouse_client;

import android.annotation.SuppressLint;
import android.content.Context;
//import android.content.res.TypedArray;
import android.graphics.Canvas;
//import android.graphics.Color;
//import android.graphics.Paint;
//import android.graphics.drawable.Drawable;
//import android.text.TextPaint;
import android.util.AttributeSet;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;


/**
 * TODO: document your custom view class.
 */
public class TrackpadView extends View {
//	private String mExampleString; // TODO: use a default from R.string...
//	private int mExampleColor = Color.RED; // TODO: use a default from
											// R.color...
//	private float mExampleDimension = 0; // TODO: use a default from R.dimen...
//	private Drawable mExampleDrawable;

//	private TextPaint mTextPaint;
//	private float mTextWidth;
//	private float mTextHeight;
	
	private TrackpadCallback m_trackPadCallback;
	
	public TrackpadView(Context context) {
		super(context);
		init(null, 0);
	}

	public TrackpadView(Context context, AttributeSet attrs) {
		super(context, attrs);
		init(attrs, 0);
	}

	public TrackpadView(Context context, AttributeSet attrs, int defStyle) {
		super(context, attrs, defStyle);
		init(attrs, defStyle);
	}

	private void init(AttributeSet attrs, int defStyle) {
		// Load attributes
//		final TypedArray a = getContext().obtainStyledAttributes(attrs,
//				R.styleable.TrackpadView, defStyle, 0);

//		mExampleString = a.getString(R.styleable.TrackpadView_exampleString);
//		mExampleColor = a.getColor(R.styleable.TrackpadView_exampleColor,
//				mExampleColor);
		// Use getDimensionPixelSize or getDimensionPixelOffset when dealing
		// with
		// values that should fall on pixel boundaries.
//		mExampleDimension = a.getDimension(
//				R.styleable.TrackpadView_exampleDimension, mExampleDimension);

//		if (a.hasValue(R.styleable.TrackpadView_exampleDrawable)) {
//			mExampleDrawable = a
//					.getDrawable(R.styleable.TrackpadView_exampleDrawable);
//			mExampleDrawable.setCallback(this);
//		}

		m_trackPadCallback = null;
		
//		a.recycle();

		// Set up a default TextPaint object
//		mTextPaint = new TextPaint();
//		mTextPaint.setFlags(Paint.ANTI_ALIAS_FLAG);
//		mTextPaint.setTextAlign(Paint.Align.LEFT);

		// Update TextPaint and text measurements from attributes
//		invalidateTextPaintAndMeasurements();
	}

//	private void invalidateTextPaintAndMeasurements() {
//		mTextPaint.setTextSize(mExampleDimension);
//		mTextPaint.setColor(mExampleColor);
//		mTextWidth = mTextPaint.measureText(mExampleString);

//		Paint.FontMetrics fontMetrics = mTextPaint.getFontMetrics();
//		mTextHeight = fontMetrics.bottom;
//	}

	@Override
	protected void onDraw(Canvas canvas) {
		super.onDraw(canvas);

		// TODO: consider storing these as member variables to reduce
		// allocations per draw cycle.
//		int paddingLeft = getPaddingLeft();
//		int paddingTop = getPaddingTop();
//		int paddingRight = getPaddingRight();
//		int paddingBottom = getPaddingBottom();
//
//		int contentWidth = getWidth() - paddingLeft - paddingRight;
//		int contentHeight = getHeight() - paddingTop - paddingBottom;

		// Draw the text.
//		canvas.drawText(mExampleString, paddingLeft
//				+ (contentWidth - mTextWidth) / 2, paddingTop
//				+ (contentHeight + mTextHeight) / 2, mTextPaint);

		// Draw the example drawable on top of the text.
//		if (mExampleDrawable != null) {
//			mExampleDrawable.setBounds(paddingLeft, paddingTop, paddingLeft
//					+ contentWidth, paddingTop + contentHeight);
//			mExampleDrawable.draw(canvas);
//		}
	}

	/**
	 * Gets the example string attribute value.
	 * 
	 * @return The example string attribute value.
	 */
//	public String getExampleString() {
//		return mExampleString;
//	}
//
//	/**
//	 * Sets the view's example string attribute value. In the example view, this
//	 * string is the text to draw.
//	 * 
//	 * @param exampleString
//	 *            The example string attribute value to use.
//	 */
//	public void setExampleString(String exampleString) {
//		mExampleString = exampleString;
//		invalidateTextPaintAndMeasurements();
//	}
//
//	/**
//	 * Gets the example color attribute value.
//	 * 
//	 * @return The example color attribute value.
//	 */
//	public int getExampleColor() {
//		return mExampleColor;
//	}
//
//	/**
//	 * Sets the view's example color attribute value. In the example view, this
//	 * color is the font color.
//	 * 
//	 * @param exampleColor
//	 *            The example color attribute value to use.
//	 */
//	public void setExampleColor(int exampleColor) {
//		mExampleColor = exampleColor;
//		invalidateTextPaintAndMeasurements();
//	}
//
//	/**
//	 * Gets the example dimension attribute value.
//	 * 
//	 * @return The example dimension attribute value.
//	 */
//	public float getExampleDimension() {
//		return mExampleDimension;
//	}
//
//	/**
//	 * Sets the view's example dimension attribute value. In the example view,
//	 * this dimension is the font size.
//	 * 
//	 * @param exampleDimension
//	 *            The example dimension attribute value to use.
//	 */
//	public void setExampleDimension(float exampleDimension) {
//		mExampleDimension = exampleDimension;
//		invalidateTextPaintAndMeasurements();
//	}
//
//	/**
//	 * Gets the example drawable attribute value.
//	 * 
//	 * @return The example drawable attribute value.
//	 */
//	public Drawable getExampleDrawable() {
//		return mExampleDrawable;
//	}
//
//	/**
//	 * Sets the view's example drawable attribute value. In the example view,
//	 * this drawable is drawn above the text.
//	 * 
//	 * @param exampleDrawable
//	 *            The example drawable attribute value to use.
//	 */
//	public void setExampleDrawable(Drawable exampleDrawable) {
//		mExampleDrawable = exampleDrawable;
//	}
	
	public void setCallback(TrackpadCallback callback) {
		m_trackPadCallback = callback;
	}
	
	@SuppressLint("ClickableViewAccessibility") @Override
	public boolean onTouchEvent(MotionEvent e) {
		if (m_trackPadCallback != null) {
//			mTpCallback.callback(e);
			int action = e.getActionMasked();
			switch(action) {
			case MotionEvent.ACTION_DOWN:
				m_trackPadCallback.mouseDown(e);
				break;
			case MotionEvent.ACTION_UP:
				m_trackPadCallback.mouseUp(e);
				break;
			case MotionEvent.ACTION_MOVE:
				m_trackPadCallback.mouseMove(e);
				break;
			}
		} else {
			Log.e("trackpad_view", "Error: no callback initiated");
		}
//		return super.onTouchEvent(e);
		return true;
	}
	
//	@Override
//	public boolean performClick() {
//		return super.performClick();
//	}
	
	public interface TrackpadCallback {
//		public void callback(MotionEvent e);
		public void mouseDown(MotionEvent e);
		public void mouseUp(MotionEvent e);
		public void mouseMove(MotionEvent e);
	}
}


